# @Time    : 2025-04-11 15:09
# @Author: Fioman
# @Phone  : 13149920693
# @Tips      : Talk is cheap,show me the code ^_^
import re

# region 1.  re.findall() 匹配所有的文本,返回列表

s = "电信号码: 10000,联通号码: 10010,移动号码: 10086"
res = re.findall(r"\d+", s)  # 匹配所有的数字
print(res)  # ['10000', '10010', '10086']

# endregion

# region 2.  re.finditer() 匹配所有的文本,返回迭代器

s = "电信号码: 10000,联通号码: 10010,移动号码: 10086"
res = re.finditer(r"\d+", s)  # 匹配所有的数字
for match in res:
    print(match.group(),match.span())

# endregion

# region 3. re.search() 匹配第一个文本,返回Match对象,如果没有匹配到,返回None

s = "电信号码: 10000,联通号码: 10010,移动号码: 10086"
res = re.search(r"\d+", s)  # 匹配第一个数字
if res:
    print(res.group(),res.span())  # 10000

# endregion

# region 4. re.match() 匹配开头的文本,返回Match对象,如果没有匹配到,返回None

res = re.match(r"\d+", s)  # 匹配开头的数字
if res:
    print(res.group(),res.span())  # None
else:
    print("没有匹配到开头的数字")

# endregion

# region 5. re.complile() 编译正则表达式,返回Pattern对象,可以重复使用

s = "电信号码: 10000,联通号码: 10010,移动号码: 10086"
comp = re.compile(r"\d+")  # 编译正则表达式
res = comp.findall(s)
print(res)

res = comp.finditer(s)
for match in res:
    print(match.group(), match.span())

# endregion

# region 6. 命名分组
import re

# 定义正则表达式，使用命名分组
pattern = r'''
    (?P<protocol>https?|ftp)://   # 匹配协议（http/https/ftp）
    (?P<domain>[\w.-]+)           # 匹配域名（字母、数字、点、连字符）
    (?::(?P<port>\d+))?           # 匹配端口（可选，冒号后接数字）
    (?P<path>/[\w/.-]*)           # 匹配路径（以/开头，可含字母、斜杠等）
'''

# 编译正则表达式（忽略空格和注释）
regex = re.compile(pattern, re.VERBOSE)
url = "https://www.example.com:8080/path/to/resource"
match = regex.search(url)
if match:
    # 通过groupdict() 获取所有命名分组的字典
    groups = match.groupdict()
    print(groups)
else:
    print("没有匹配到有效的URL")

# endregion